ScrolledWindow: Don’t req size for autohidden bars
authorDaniel Boles <dboles@src.gnome.org>
Fri, 24 Feb 2017 22:46:05 +0000 (22:46 +0000)
committerDaniel Boles <dboles@src.gnome.org>
Wed, 10 May 2017 21:29:01 +0000 (22:29 +0100)
POLICY_AUTOMATIC means scrollbars are only shown when needed, i.e. when
the size of the window is not large enough to show the entire child. So
when measuring the preferred size, such scrollbars should be ignored.

But measure() added size for *any* non-overlay scrollbar of the opposite
orientation, e.g. for horizontal size, it added the width of vscrollbar.
So we requested for child + bar, & having enough for child meant that the
policy hid the bar, leaving extra space empty below/right of the child.

Fix this by only adding size for such bars if they use POLICY_ALWAYS.

https://bugzilla.gnome.org/show_bug.cgi?id=778853

gtk/gtkscrolledwindow.c

index 1b09478d4933e81ce521575febf7c0bc38b65ba0..1a22923313c780d5b055d2d2b7cea409e2c40283 100644 (file)
@@ -1765,7 +1765,7 @@ gtk_scrolled_window_measure (GtkCssGadget   *gadget,
           minimum_req = MAX (minimum_req, hscrollbar_requisition.width + sborder.left + sborder.right);
           natural_req = MAX (natural_req, hscrollbar_requisition.width + sborder.left + sborder.right);
         }
-      else if (!priv->use_indicators)
+      else if (!priv->use_indicators && priv->hscrollbar_policy == GTK_POLICY_ALWAYS)
         {
           minimum_req += hscrollbar_requisition.height;
           natural_req += hscrollbar_requisition.height;
@@ -1782,7 +1782,7 @@ gtk_scrolled_window_measure (GtkCssGadget   *gadget,
           minimum_req = MAX (minimum_req, vscrollbar_requisition.height + sborder.top + sborder.bottom);
           natural_req = MAX (natural_req, vscrollbar_requisition.height + sborder.top + sborder.bottom);
         }
-      else if (!priv->use_indicators)
+      else if (!priv->use_indicators && priv->vscrollbar_policy == GTK_POLICY_ALWAYS)
         {
           minimum_req += vscrollbar_requisition.width;
           natural_req += vscrollbar_requisition.width;